package com.xiyu.service.service.mailbox;
import com.xiyu.service.vo.mailbox.mail.MailGetReceiverByAddressesOutput;
import com.xiyu.service.vo.mailbox.mail.MailGetReceiverByAddressesInput;
import com.xiyu.service.vo.mailbox.mail.MailSaveMailAsFileOutput;
import com.xiyu.service.vo.mailbox.mail.MailSaveMailInput;
import com.xiyu.service.vo.mailbox.mail.MailReceiverMultiQueryOutput;
import com.xiyu.service.vo.mailbox.mail.MailReceiverMultiQueryInput;
import com.xiyu.service.vo.mailbox.mail.MailClearMailLabelInput;
import com.xiyu.service.vo.mailbox.mail.MailGetMailDetailOutput;
import com.xiyu.service.vo.mailbox.mail.MailSetMailJunkInput;
import com.xiyu.service.vo.mailbox.mail.MailMoveFolderOutput;
import com.xiyu.service.vo.mailbox.mail.MailMoveFolderInput;
import com.xiyu.service.vo.mailbox.mail.MailSetMailLabelInput;
import com.xiyu.service.vo.mailbox.mail.MailSetMailTopInput;
import com.xiyu.service.vo.mailbox.mail.MailSetMailReadInput;
import com.xiyu.service.vo.mailbox.mail.MailPageMailOutput;
import com.xiyu.service.vo.mailbox.mail.MailPageMailInput;
import com.xiyu.service.vo.mailbox.mail.MailLabelSortInput;
import com.xiyu.service.vo.mailbox.mail.MailSingleGetLabelOutput;
import com.xiyu.service.vo.mailbox.mail.MailUpdateLabelInput;
import com.xiyu.service.vo.mailbox.mail.MailCreateLabelInput;
import com.xiyu.service.vo.mailbox.mail.MailListLabelOutput;
import com.xiyu.service.vo.mailbox.mail.MailUpdateFolderInput;
import com.xiyu.service.vo.mailbox.mail.MailCreateFolderInput;
import com.xiyu.service.vo.mailbox.mail.MailGetFolderByAccountIdsOutput;
import com.xiyu.service.framework.web.web.core.pojo.PageResult;

import java.util.List;

/**
 * 邮件管理 Service 接口
 */
public interface MailService {

    List<MailGetFolderByAccountIdsOutput> getFolderByAccountIds(List<Long> accountIds);

    Long createFolder(MailCreateFolderInput inputVO);

    Boolean updateFolder(MailUpdateFolderInput inputVO);

    Boolean deleteFolder(Long id);

    List<MailListLabelOutput> listLabel(Long ownerId);

    Long createLabel(MailCreateLabelInput inputVO);

    Boolean updateLabel(MailUpdateLabelInput inputVO);

    MailSingleGetLabelOutput singleGetLabel(Long id);

    Boolean labelSort(MailLabelSortInput inputVO);

    Boolean deleteLabel(Long id);

    Long getUnreadTopMail(List<Long> accountIds);

    PageResult<MailPageMailOutput> pageMail(MailPageMailInput inputVO);

    Boolean setMailRead(MailSetMailReadInput inputVO);

    Boolean setMailTop(MailSetMailTopInput inputVO);

    Boolean setMailLabel(MailSetMailLabelInput inputVO);

    List<MailMoveFolderOutput> moveFolder(MailMoveFolderInput inputVO);

    Boolean setMailJunk(MailSetMailJunkInput inputVO);

    Boolean deleteMail(List<Long> mailIds);

    MailGetMailDetailOutput getMailDetail(Long id);

    Boolean setFolderAllMailRead(Long id);

    Boolean clearMailLabel(MailClearMailLabelInput inputVO);

    List<MailReceiverMultiQueryOutput> receiverMultiQuery(MailReceiverMultiQueryInput inputVO);

    Long saveMail(MailSaveMailInput inputVO);

    MailSaveMailAsFileOutput saveMailAsFile(Long id);

    List<MailGetReceiverByAddressesOutput> getReceiverByAddresses(List<MailGetReceiverByAddressesInput> inputVO);

    void scheduleSendMail();

}
